package JZ_Offer.algorithm.bit_operation;

/**
 * 数值的整数次方
 *
 * 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
 * 保证base和exponent不同时为0
 *
 * @Author piper
 * @Date 2019/11/21 1:09 下午
 */
public class JZ16_数值的整数次方 {

    private static double Power(double base, int exponent) {
        // 这两个判断没有可能减少吗
        if (base == 0) {
            return 0;
        }
        if (exponent == 0) {
            return 1;
        }

        // 怎么去掉正负标志
        boolean type = false;
        if (exponent < 0) {
            type = true;
        }

        // 这里设置为base 将相当于循环了一次
        double result = base;

        // 怎么将两个循环转换为一个
        if (type) {
            for (int i = exponent; i < -1; i++) {
                result *= base;
            }
            return 1 / result;
        } else {
            // 因为初始值等于base 所以只能从1开始
            for (int i = 1; i < exponent; i++) {
                result *= base;
            }
            return result;
        }
    }

    /**
     * 官网优化版
     */
    private static double Power1(double base, int exponent) {
        if (base == 0.0) {
            return 0.0;
        }

        // 设置为 1.0 而不是 1
        double result = 1.0;
        // 这行简化了下面的for循环
        int l = exponent > 0 ? exponent : -exponent;

        // 1可以从0开始  2可以使用一个循环
        for (int i = 0; i < l; i++) {
            result *= base;
        }

        return exponent > 0 ? result : 1 / result;
    }


    public static void main(String[] args) {
        System.out.println(Power(2, -3));
    }
}
